from PySide import QtGui
from new_order import Ui_NewOrder
from ControlAddStuff import ControlAddStuff
import datetime

class ControlNewOrder(QtGui.QDialog):
    def __init__(self, clientId: int, parent=None):
        super(ControlNewOrder, self).__init__(parent)
        self.ui = Ui_NewOrder()
        self.ui.setupUi(self)
        self.ui.buttonBox.accepted.connect(self.okCreateOrder)
        self.ui.buttonBox.rejected.connect(self.cancel)
        self.ui.btnStaff.clicked.connect(self.addStaff)

        self.ui.dateDate.setDate(datetime.date.today())
        self.ui.dateDeliveryDate.setDate(datetime.date.today())

        self.parent = parent
        self.clientId = clientId
        self.stuff = []   # список товаров в заказе. это попадёт в БД

    def addStaff(self):
        """
        Добавление товаров в заказ.
        """
        dialog = ControlAddStuff(self, self.stuff)
        dialog.setModal(True)
        dialog.show()

    def okCreateOrder(self):
        if len(self.stuff) != 0:
            db = self.parent.db

            orderId = db.getTable('Заказы').addRow(
                {
                    'Клиент': self.clientId,
                    'Наименование': self.ui.tbxName.text(),
                    'Дата': self.ui.dateDate.date().toPython(),
                    'Время доставки': self.ui.dateDeliveryDate.date().toPython(),
                    'Дополнительные расходы': self.ui.dblSpinBoxExtraCost.value(),
                    'Описание': self.ui.plainTextEditDescription.toPlainText(),
                    'Оплачено': 0
                }
            )
            for item in self.stuff:
                db.getTable('Товары_Заказы').addRow(
                    {
                        'Товар': int(item[0]),
                        'Заказ': orderId,
                        'Кол-во': int(item[4]),
                        'Поставщик': int(item[1]),
                    }
                )

            record = [
                str(orderId),
                db.getTable('Клиенты').select(selectTo=['Название'], condtions={'Id': self.clientId})[0][0],
                self.ui.tbxName.text(),
                str(self.ui.dateDate.date().toPython()),
                str(self.ui.dateDeliveryDate.date().toPython()),
                str(self.ui.dblSpinBoxExtraCost.value()),
                self.ui.plainTextEditDescription.toPlainText(),
                'Нет',
                sum([int(item[4]) * db.selectByQuery(
                    fromTables='Товары', select='Стоимость', where='id={}'.format(item[0])
                )[0][0] for item in self.stuff]).__str__()
            ]

            tableWidget = self.parent.ui.tableOrders
            tableWidget.setRowCount(tableWidget.rowCount() + 1)
            for i in range(0, len(record)):
                tableWidget.setItem(
                    tableWidget.rowCount() - 1,
                    i,
                    QtGui.QTableWidgetItem(record[i])
                )
            self.accept()
        else:
            QtGui.QMessageBox.critical(self, 'Ошибка', 'Нет товаров в заказе!')

    def cancel(self):
        self.reject()
